﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using EntitiesLayer;
using System.Data.SqlClient;
using System.Data;

namespace DAL
{
    /// <summary>
    /// No es thread safe 
    /// objeto para mantener la session actual. (Esta abierto a modificaciones o mejoras)
    /// </summary>
    public class SesionUsuario
    {

        private SesionUsuario session;

        public SesionUsuario Session {

            get { return session; }
        }

        private int idUsuarioActual;



        bool iniciarSesion(string nombreUsuario, string contrasena)
        {
            
            throw new NotImplementedException();
        }

        void cerrarSesion()
        {
            throw new NotImplementedException();
        }

     
        Usuario levantarUsuario()
        {
            //levanta de nuevo el usuario actual de la session.
            throw new NotImplementedException();
        }

        public static bool esPermitido(int prol, int ppermiso)
        {
            SqlCommand cmd = new SqlCommand();
            cmd.Parameters.Add(new SqlParameter("@IdRol", prol));
            cmd.Parameters.Add(new SqlParameter("@IdPermiso", ppermiso));
            DataSet ds = DBAccess.ExecuteSPWithDS(ref cmd, "PaBuscarPermisoXRol");

            if (ds.Tables[0].Rows.Count > 0)
            {
                return true;
            }
            else
                return false;
        }

        public static bool cambiarClave(String pUsuario, String pClave, String pNewClave)
        {
            if (validarClave(pUsuario, pClave)) {
                try 
                {
                    SqlCommand cmd = new SqlCommand();
                    cmd.Parameters.Add(new SqlParameter("@NombreUsuario", pUsuario));
                    cmd.Parameters.Add(new SqlParameter("@ClaveUsuario", pNewClave));
                    DBAccess.ExecuteSPNonQuery(ref cmd, "PaCambiarClaveUsuario");
                    return true;
                }
                catch (SqlException ex)
                {
                    Console.WriteLine(ex.Message);
                    return false;
                }

            }
            return false;
        }

        private static bool validarClave(String pUsuario, String pClave)
        {
            SqlCommand cmd = new SqlCommand();
            cmd.Parameters.Add(new SqlParameter("@nombre_usu", pUsuario));
            cmd.Parameters.Add(new SqlParameter("@clave_usu", pClave));
            DataSet dataset = DBAccess.ExecuteSPWithDS(ref cmd, "PaIniciarSesion");

            if (dataset.Tables[0].Rows.Count > 0)
                return true;
            else
                return false;
        }

    }
}
